#ifndef LSIMPLE_H_INCLUDED
#define LSIMPLE_H_INCLUDED


#include <stdlib.h>
#include<stdio.h>

#if !defined(NULL)
#define NULL 0
#endif

#if !defined(FALSE)
#define FALSE 0
#endif

#if !defined(TRUE)
#define TRUE 1
#endif

typedef enum
{
    LS_PRIMERO=1,
    LS_SIGUIENTE=2,

    } TMovimS;

typedef struct TNodoSimple
{
    void*  Elem;
    struct TNodoSimple *Sig;
} TNodoSimple;

typedef struct
{
    TNodoSimple *Prim, *Cte;
    int TamanioDato;
} TListaSimple;


/* LS_Crear
@ PRE: LS no creada
@ POS: LS creada
*/
void LS_Crear (TListaSimple *pLS, int tamanioDato);




/* LS_Vacia
@ PRE: LS creada
@ POS: Si la lista esta vacia devuelve TRUE, sino FALSE
*/
int LS_Vacia (TListaSimple LS);

/* LD_Vaciar
@ PRE: LD creada
@ POS: Se eliminaron todos los elementos de LD
*/
void LS_Vaciar (TListaSimple *pLS);

/*
@ PRE: LS creada y no vacia
@ POS: Si M = LS_PRIMERO, el nuevo cte es el primero de la lista
       si M = LS_SIGUIENTE,
       Si pudo realizar el movimiento devuelve TRUE, sino FALSE
*/
int LS_MoverCte (TListaSimple *pLS, TMovimS M );

/*
@ PRE: LD creada
@ POS: Se agrego E a la lista y es el nuevo corriente,
       si M = LD_PRIMERO o la lista esta vacia, se inserto como primero de la lista
       si M = LD_SIGUIENTE, se inserto despues del elemento coriente
       Si pudo insertar el elemento devuelve TRUE, sino FALSE
*/
int LS_Insertar (TListaSimple *pLS, TMovimS M, void* pE);


/*
@ PRE: LS creada y no vacia
@ POS: Se elimino el elemento corriente. El nuevo corriente es el siguiente de eliminado, o el anterior si este era el ultimo
*/
void LS_BorrarCte (TListaSimple *pLS);


/*
@ PRE: LS creada y no vacia
@ POS:
*/
void LS_ObtenerCte (TListaSimple LS, void* pE);


/*
@ PRE:
@ POS:
*/
void LS_ModificarCte (TListaSimple *pLS, void* pE);

#endif // LSIMPLE_H_INCLUDED
